package com.pengshun.modules.api.mapper;

import com.pengshun.modules.api.coal.domain.Coal;
import com.pengshun.modules.api.coal.domain.CoalMine;
import com.pengshun.modules.api.coal.result.CoalMineResult;
import com.pengshun.modules.api.coal.result.MerchantDetilResult;
import com.pengshun.modules.api.coal.result.MerchantMapResult;
import com.pengshun.modules.api.coal.result.MerchantResult;
import com.pengshun.modules.api.coal.service.dto.CoalDto;
import com.pengshun.modules.api.coal.service.dto.ProblemDto;
import com.pengshun.modules.domain.MerchantCoal;
import com.pengshun.modules.domain.Problem;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;

import java.math.BigDecimal;
import java.util.List;

public interface PsMerchantMapper {

    /**
     * 条件查询煤炭商或者信息部 列表
     * @param merchantCategoryId
     * @param page
     * @param size
     * @param category
     * @param name
     * @param status
     * @param sort
     * @param districtId
     * @return
     */
    List<MerchantResult> selectListBy(@Param("merchantCategoryId") Long merchantCategoryId, @Param("page") int page, @Param("size") int size, @Param("category")String category,
                                      @Param("name") String name, @Param("status") Integer status, @Param("sort")Integer sort, @Param("districtId")Integer districtId,
                                      @Param("level")Integer level, @Param("lngX") BigDecimal lngX, @Param("latY")BigDecimal latY, @Param("mineMouthId")Long mineMouthId, @Param("categoryCode") String categoryCode);

    /**
     * 查询信息部或者煤炭商 地图信息
     * @param lngX
     * @param latY
     * @param merchantCategoryId
     * @return
     */
    List<MerchantMapResult> selectAllMerchantMap(@Param("lngX")Double lngX,@Param("latY") Double latY,@Param("merchantCategoryId") Long merchantCategoryId,String name);

    /**
     * 距离查询信息部或者煤炭商 地图信息
     * @param lngX
     * @param latY
     * @param merchantCategoryId
     * @return
     */
    List<MerchantMapResult> selectAllMerchantMapBy(@Param("lngX")Double lngX,@Param("latY") Double latY, @Param("merchantCategoryId") Long merchantCategoryId,
                                                   @Param("name") String name, @Param("distance") int distance);

    /**
     * 查询矿口地图信息
     * @param lngX
     * @param latY
     * @return
     */
    List<MerchantMapResult> selectAllmineMouthMap(@Param("lngX")Double lngX, @Param("latY")Double latY, @Param("name") String name );

    /**
     * 距离筛选查询矿口地图信息
     * @param longitude
     * @param latitude
     * @param name
     * @param distance
     * @return
     */
    List<MerchantMapResult> selectAllmineMouthMapBy(@Param("longitude") Double longitude, @Param("latitude") Double latitude, @Param("name") String name, @Param("distance") int distance);

    /**
     * 查询矿口信息列表
     * @param page
     * @param pageSize
     * @return
     */
    List<CoalMineResult> selectMineMouth(@Param("page")int page, @Param("pageSize")int pageSize, @Param("name") String name, @Param("type") Integer type, @Param("sort") Integer sort
            , @Param("level") Integer level, @Param("provinceId") Integer provinceId, @Param("cityId") Integer cityId, @Param("districtId") Integer districtId);

    /**
     * 查询矿口详情
     * @param mineMouthId
     * @return
     */
    CoalMine findByIdAndStatus(@Param("mineMouthId")Long mineMouthId);


    /**
     * 商户详情
     * @param merchantId
     * @return
     */
    MerchantDetilResult selectMerchantDetil(@Param("merchantId")Long merchantId);

    /**
     * 根据商户类别id查询
     * @param merchantCategoryId
     * @return
     */
    List<MerchantResult> selectListByMerchantId(@Param("merchantCategoryId")Long merchantCategoryId,@Param("lngX") BigDecimal lngX, @Param("latY")BigDecimal latY);

    /**
     * 根据商户id 查询指定类别id merchantId  列表信息
     * @param mineMouthId
     * @param merchantCategoryId
     * @param page
     * @param size
     * @return
     */
    @Select("SELECT  pm.`id`,pm.`score`,pm.`door_img` as doorImg,pm.`name`, pm.`status`,pm.`detail_address` as detailAddress,COUNT(DISTINCT ps.`coal_id`) coalNum , COUNT(DISTINCT pt.`transport_id`) transportNum " +
            " FROM   `ps_merchant` pm   " +
            " LEFT JOIN ps_merchant_coal  ps ON ps.`merchant_id`=pm.`id` and  ps.status=1 " +
            " LEFT JOIN ps_transport  pt ON pt.`merchant_id`=pm.`id` and  pt.status=1 " +
            " WHERE pm.`merchant_category_id`= #{merchantCategoryId} " +
            " AND ps.mine_mouth_id=#{mineMouthId} " +
            "  GROUP BY pm.`id` limit #{page} , #{size} ")
    List<MerchantResult> selectListByMineMouthId(@Param("mineMouthId")Long mineMouthId,@Param("merchantCategoryId") Long merchantCategoryId, @Param("page")Integer page,@Param("size") Integer size);

    /**
     * 查询关注列表
     * @param page
     * @param size
     * @param merchantCategoryId
     * @param userId
     * @param lngX
     * @param latY
     * @return
     */
    List<MerchantResult> getAttentionList(@Param("page") int page, @Param("size") int size, @Param("merchantCategoryId") Long merchantCategoryId, @Param("userId") Long userId, @Param("lngX") BigDecimal lngX, @Param("latY") BigDecimal latY);

    /**
     * 根据问题类型查询列表
     * @param problemTypeId
     * @return
     */
    List<ProblemDto> findByProblemTypeId(@Param("problemTypeId") Integer problemTypeId);

    /**
     * 查询煤矿下的煤种
     * @param mineMouthId
     * @return
     */
    @Select("SELECT pc.`coal_category_id`,pc.`coal_category_name` FROM ps_coal  pc WHERE pc.`mine_mouth_id`=#{mineMouthId} GROUP BY pc.`coal_category_id`")
    List<MerchantCoal> findCoalCategoryByMineMouthId(@Param("mineMouthId") Long mineMouthId);

    /**
     * 查询煤种下的煤炭
     * @param coalCategoryId
     * @return
     */
    @Select("select pc.`coal_id`,pc.`name` from ps_coal  pc where pc.`mine_mouth_id`=#{mineMouthId} and pc.`coal_category_id`=#{coalCategoryId}")
    List<Coal> findCoalByMineCategoryId(@Param("mineMouthId") Long mineMouthId, @Param("coalCategoryId") Long coalCategoryId);

    /**
     * 查詢所有煤矿
     * @return
     */
    @Select("select mine_mouth_id,mine_mouth_name from ps_mine_mouth ")
    List<CoalMine> findAllCoalMine();
}
